代码规范
什么样的代码是好的?
代码好坏的三个维度:代码运行时间、代码开发时间、代码维护和扩展性。
在项目初期、中期,应该注意代码开发时间和代码维护和扩展性
项目后期,应该注意代码运行时间
阿里巴巴代码规范
学习资源
解读阿里巴巴 Java 代码规范(1):从命名风格等方面解读阿里巴巴 Java 代码规范..._里奥ii的技术博客_51CTO博客
1.命名风格
下划线或美元符号
代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束
类命名
类名使用 UpperCamelCase 风格,必须遵从驼峰形式,但以下情形例外:DO/BO/DTO/VO/AO
抽象类的命名
抽象类命名使用 Abstratc 或 Base 开头。
2.常量定义
避免魔法值的使用
不允许任何魔法值(未经定义的常量)直接出现在代码中
魔法值确实让你很疑惑,比如你看下面这个例子:
int priceTable[] = new int[16];//这样定义错误;这个 16 究竟代表什么?
正确的定义方式是这样的:
static final int PRICE_TABLE_MAX = 16; //这样定义正确,通过使用完整英语单词的常量名明确定义
int price Table[] = new int[PRICE_TABLE_MAX];
变量值范围
阿里推荐如果变量值仅在一个范围内变化,且带有名称之外的延伸属性,定义为枚举类。下面这个正例中的数字就是延伸信息,表示星期几。正例如下所示。
public Enum
3.代码格式
大括号的使用约定
阿里强制规定如果是大括号为空,则简洁地写成{}即可,不需要换行;如果是非空代码块则:
1. 左大括号前不换行
2. 左大括号后换行
3. 右大括号前换行
4. 右大括号后还有 else 等代码则不换行表示终止的右大括号后必须换行
单行字符数限制
阿里强制规定单行字符数限制不超过 120 个,超出需要换行,换行时遵循如下原则:
1. 第二行相对第一行缩进 4 个空格,从第三行开始,不再继续缩进,参考示例。
2. 运算符与下文一起换行。
3. 方法调用的点符号与下文一起换行。
4. 方法调用时,多个参数,需要换行时,在逗号后进行。
5. 在括号前不要换行,
4.OOP 规约
静态变量及方法调用
代码中避免通过一个类的对象引用访问此类的静态变量或静态方法,暂时无谓增加编译器解析成本,直接用类名来访问即可。
可变参数编程
相同参数类型、相同业务类型,才可以使用 Java 的可变参数,避免使用 Object,并且要求可变参数必须放置在参数列表的最后(提倡同学们尽量不用可变参数编程)。
5.并发处理
单例模式需要保证线程安全
阿里强制要求获取单例对象需要保证线程安全,其中的方法也要保证线程安全,并进一步说明资源驱动类、工具类、单例工厂类都需要注意。
6.控制语句
Switch 语句的使用
阿里强制规定在一个 switch 块内,每个 case 要么通过 break/return 等来终止,要么注释说明程序将继续执行到哪一个 case 为止;在一个 switch 块内,都必须包含一个 default 语句并且放在最后,即使它什么代码也没有。
7.集合处理
集合转数组处理
阿里强制规定使用集合转数组的方法,必须使用集合的 toArray(T[] arrays),传入的是类型完全一样的数组,大小就是 list.size()。使用 toArray 带参方法,入参分配的数组空间不够大时,toArray 方法内部将重新分配内存空间,并返回新数组地址;如果数组元素大于实际所需,下标为[list.size()] 的数组元素将被置为 null,其它数组元素保持原值,因此最好将方法入参数组大小定义与集合元素个数一致。
8.注释规约
方法注释要求
方法内部单行注释,在被注释语句上方另起一行,使用//注释。方法内部多行注释使用/**/注释,注意与代码对照。
9.其他
数据结构初始化大小
阿里推荐任何数据结构的构造或初始化,都应指定大小,避免数据结构暂时无限增长吃光内存。